上一篇的 AI Agent 協同合作是基於單向 Workflow 的場景,適合有固定作業流程,並且有順序性且單向作業。而這一次場景同樣採取 Multi Agents 的設計,但流程並非單向作業,而是具有回饋的情境。
想像一下,在一個真的辦公室情境,A 負責撰寫廣告文案,文案完成後會呈送給 B 進行文案審核檢視,而 B 針對文案內容可能就幾個面向進行檢視並提供改善建議,再交由 A 進行調整,這樣的工作流程一直輪迴直到文案被審核通過。這樣的場景是真實辦公室再正常不過的作業流程,那如果這個作業流程換成由 AI Agent 來處理,如何實現呢?
(撰寫此篇內容時,剛好是山坨兒登陸造成停電中,有限電力下盡可能快速寫完,避免斷賽 o_O )
你是一位擁有20年經驗的文案撰寫者,以簡潔和冷幽默著稱。
你的目標是以專家的身份提供最佳的文案。
每次只提供一個提案。
你全神貫注於眼前的任務。
不要浪費時間閒聊。
根據建議修正文案。
// Define the agents
string copywriterAgentName = "CopyWriterAgent";
string copywriterAgentInstructions =
"""
You are a copywriter with 20 years of experience, known for brevity and dry humor.
Your goal is to provide the best copy as an expert.
Only offer one proposal at a time.
You stay laser-focused on the task at hand.
Don't waste time on small talk.
Refine the copy based on suggestions.
""";
ChatCompletionAgent copywriterAgent = new()
{
Name = copywriterAgentName,
Instructions = copywriterAgentInstructions,
Kernel = kernel
};
你是一位文案撰寫和行銷領域的專家,負責審視內容是否符合以下標準:
引人注目的標題
引發共鳴且具情感感染力的內文
段落簡潔,理想上每段控制在4到5句
頻繁使用「你」和「我」的代名詞
使用強烈的視覺形容詞
結構清晰,包括「標題」和「內文」
內文必須傳達產品對消費者的益處
回覆建議時請使用繁體中文。
你的目標是判斷所提供的文案是否符合這些標準。
如果符合,請表明已批准。
如果不符合,請提供如何改善文案的見解,但不需舉例。
如果符合,請表明已批准。
如果不符合,請提供如何改善文案的見解,但不需舉例。
如果符合,請表明已批准。
如果不符合,請提供如何改善文案的見解,但不需舉例。
string reviewerAgentName = "ReviewerAgent";
string reviewerAgentInstructions =
"""
You are an expert in copywriting and marketing, responsible for reviewing content to meet the following criteria:
- An attention-grabbing headline
- A compelling and emotionally resonant body text
- Short paragraphs, ideally 4 to 5 sentences per paragraph
- Frequent use of "you" and "I" pronouns
- Strong visual adjectives
- A clear structure with a 'headline' and 'body content'
- The body text must convey the product's benefits to the consumer
When replying with suggestions, please use Traditional Chinese.
Your goal is to determine if the provided copy meets these criteria.
If it does, state that it is approved.
If not, offer insights on how to refine the copy, without giving specific examples.
If it does, state that it is approved.
If not, offer insights on how to refine the copy, without giving specific examples.
If it does, state that it is approved.
If not, offer insights on how to refine the copy, without giving specific examples.
""";
ChatCompletionAgent reviewerAgent = new()
{
Name = reviewerAgentName,
Instructions = reviewerAgentInstructions,
Kernel = kernel,
};
KernelFunction terminationFunction =
AgentGroupChat.CreatePromptFunctionForStrategy(
"""
Determine if the copy has been approved. If so, respond with a single word: 'yes'
History:
{{$history}}
""",
safeParameterNames: "history");
根據最近的發言者決定下一位應發言的參與者。
只提供應該發言的參與者名稱。
每位參與者不得連續發言超過一次。只能從以下參與者中選擇:
{{{reviewerAgentName}}}
{{{copywriterAgentName}}}選擇下一位參與者時,必須始終遵循以下規則:
在 {{{copywriterAgentName}}} 之後,輪到 {{{reviewerAgentName}}} 發言。
在 {{{reviewerAgentName}}} 之後,輪到 {{{copywriterAgentName}}} 發言。歷史記錄:
{{$history}}
KernelFunction selectionFunction =
AgentGroupChat.CreatePromptFunctionForStrategy(
$$$"""
Determine which participant should speak next based on the most recent speaker.
Only provide the name of the participant who should speak next.
No participant should speak more than once in a row.
Choose only from these participants:
- {{{reviewerAgentName}}}
- {{{copywriterAgentName}}}
Always follow these rules when selecting the next participant:
- After {{{copywriterAgentName}}}, it is {{{reviewerAgentName}}}'s turn.
- After {{{reviewerAgentName}}}, it is {{{copywriterAgentName}}}'s turn.
History:
{{$history}}
""",
safeParameterNames: "history");
AgentGroupChat chat = new(copywriterAgent, reviewerAgent)
{
ExecutionSettings = new()
{
TerminationStrategy =
new KernelFunctionTerminationStrategy(terminationFunction, kernel)
{
// reviewerAgent 決定是否通過文案.
Agents = [reviewerAgent],
// 通過文案後回覆如果有 approved 字樣.就表示目標任務到此結束.否則就繼續回到 copywriterAgent 修正文案.
ResultParser = (result) => result.GetValue<string>()?.Contains("yes", StringComparison.OrdinalIgnoreCase) ?? false,
// prompt 中的 history 變數名稱
HistoryVariableName = "history",
// 最多迭代次數
MaximumIterations = 10,
// 決定要保留對話紀錄的回合數,可以用於節省 token的使用
HistoryReducer = new ChatHistoryTruncationReducer(1),
},
SelectionStrategy =
new KernelFunctionSelectionStrategy(selectionFunction, kernel)
{
// 起始對話參與者
InitialAgent = copywriterAgent,
// 從結果中取得下一個對話參與者, 如果沒有結果就回到 copywriterAgent
ResultParser = (result) => result.GetValue<string>() ?? copywriterAgentName,
// prompt 中的 history 變數名稱
HistoryVariableName = "history",
// 決定要保留對話紀錄的回合數,可以用於節省 token的使用
HistoryReducer = new ChatHistoryTruncationReducer(1),
},
}
};
ChatMessageContent message = new(AuthorRole.User, "AI 吸塵器的廣告文案。");
chat.AddChatMessage(message);
Console.WriteLine(message + "\n");
await foreach (ChatMessageContent responese in chat.InvokeAsync())
{
Console.WriteLine($"{responese.Role}: {responese.Content}");
}
Console.WriteLine($"\n[IS COMPLETED: {chat.IsComplete}]");
Assistant: 「解放雙手,讓智能吸塵器為您工作。只需一按按鈕,髒亂自動退場。掃地機器人,不會反抗,也不會要求午餐。」
Assistant: 這段廣告文案尚不符合規範。以下是改進的建議:
1. **引人注目的標題**:增加一個引人入勝的標題,能讓消費者瞬間吸引注意。
2. **情感共鳴的正文**:加入更多情緒性的描述,例如對於乾淨環境的嚮往與對繁忙生活的理解,這樣可以讓讀者產生共鳴。
3. **短段落**:確保每個段落控制在4到5句話之內,使閱讀更為順暢。
4. **頻繁使用「你」和「我」的代詞**:透過使用更多「你」和「我」,增強與讀者的連結感。
5. **強烈的視覺形容詞**:使用更生動的形容詞來描繪產品的外觀及效果,使讀者更能形像產品帶來的感受。
6. **清晰的結構**:標題和正文內容要有明確分隔,並且保持結構的清晰,以便於讀者快速理解產品的主要優勢。
這些改進將有助於使文案更具有效性及吸引力。
Assistant: 「進入無塵世界,將清掃工作交給智能吸塵器。輕鬆一按,家裡的髒亂自動消失。它不會抱怨,也不會偷懶,只有無盡的清潔。」
Assistant: 這段廣告文案仍然不完全符合規範。以下是進一步的改進建議:
1. **引人注目的標題**:考慮增加一個更具吸引力的標題,讓讀者在第一時間就能被吸引。
2. **情感共鳴的正文**:在正文中加入更多情感元素,例如描述使用智能吸塵器後的輕鬆感、心情的愉悅等,讓讀者能感受到產品為他們生活帶來的改善。
3. **短段落**:確保每個段落不超過四到五句,這有助於提高可讀性,讓讀者更易於吸收資訊。
4. **更頻繁地使用「你」和「我」的代詞**:增加「你」和「我」的使用頻率,能增加與讀者的互動感,讓他們覺得產品是為他們而設計的。
5. **強烈的視覺形容詞**:使用更生動和形象的形容詞來修飾吸塵器的性能和效果,讓讀者能夠在腦海中描繪出清潔的效果。
6. **清晰的結構**:保持文案結構的清晰和邏輯性,讓讀者在閱讀時能輕鬆理解產品的好處和使用方式。
透過這些調整,文案將變得更加引人入勝且具說服力。
Assistant: 「擺脫掃地的煩惱,讓這個智能吸塵器替你出任務。只需一鍵,家裡的塵埃立刻消失。它無需休息,連空氣也會對它感到敬畏。」
Assistant: 這段廣告文案依然尚不完全符合規範。以下是建議的進一步改進方向:
1. **引人注目的標題**:需要一個更加吸引眼球的標題,以吸引讀者的注意並激發他們的興趣。
2. **情感共鳴的正文**:增加更多情感性的語言,以展示使用智能吸塵器後的輕鬆與快樂感,讓讀者能夠產生共鳴。
3. **短段落**:確保每段落的長度控制在4到5句之內,這樣能讓文字更為易讀。
4. **頻繁使用「你」和「我」的代詞**:透過增加「你」和「我」,能讓讀者感受到更加親密的交流和情感連結。
5. **強烈的視覺形容詞**:使用更具視覺衝擊的形容詞來描述吸塵器的外觀及其效果,讓讀者能更清晰地想像產品的清潔效益。
6. **清晰的結構**:確保文案有明確的標題和正文,結構上要井然有序,以便讀者能有效理解產品的主要優勢。
針對這些方向的優化,將能提升文案的吸引力和說服力。
Assistant: 「掃地再也不是你的業務了!智能吸塵器一鍵啟動,髒東西自動撤退。無需請假,它永遠不會累,還會讓你有更多時間享受生活。」
Assistant: 這段廣告文案滿足了大部分的規範,以下是我對它的評價:
1. **引人注目的標題**:標題已經具備吸引力,能夠引發讀者的興趣。
2. **情感共鳴的正文**:正文有效地傳達了使用智能吸塵器的好處,並暗示了能夠給用戶帶來更多自由時間的情感價值。
3. **短段落**:段落基本上是適中的,便於閱讀。
4. **頻繁使用「你」和「我」的代詞**:文案中使用了「你」,這增強了與讀者的互動感,但「我」的使用可以適當添加以提高親密感。
5. **強烈的視覺形容詞**:雖然有一些描繪,如「髒東西自動撤退」,但可以進一步增強形容詞以提升畫面感。
6. **清晰的結構**:文案結構清楚,有效引導讀者了解產品的優勢和功能。
總結來說,這段文案已經相當接近理想狀態,但可以透過更加具體且生動的語言來進一步提高吸引力。整體來看,這段文案是可接受的。
[IS COMPLETED: True]
這樣的合作方式不僅限於廣告文案撰寫,還可以擴展至其他領域。例如,AI Agent-A 可以用來生成新聞報導、社交媒體貼文、甚至技術文件;AI Agent-B 則可以在這些領域中提供針對內容結構、語法規則與讀者需求的多方位建議。這種動態的協作模式就像真實的互動,將真實場景轉換成 AI Agent,可以想像今天如果是個人工作者,透過實現 AI Agent,能讓它們彼此協作,像是「虛擬團隊」一樣處理複雜問題。透過這種協同工作模式,AI 不再只是解決問題的工具,更是一個主動參與、合作無間的創作者。